[−][src]Crate hash32
32-bit hashing machinery
Why?
Because 32-bit architectures are a thing (e.g. ARM Cortex-M) and you don't want your hashing function to pull in a bunch of slow 64-bit compiler intrinsics (software implementations of 64-bit operations).
Relationship to core::hash
This crate exposes the same interfaces you'll find in core::hash
: Hash
, Hasher
,
BuildHasher
and BuildHasherDefault
. The main difference is that hash32::Hasher::finish
returns a u32
instead of u64
, and the contract of hash32::Hasher
forbids the implementer
from performing 64-bit (or 128-bit) operations while computing the hash.
#[derive(Hash32)]
The easiest way to implement hash32::Hash
for a struct
is to use the #[derive(Hash32)]
.
#[macro_use] extern crate hash32_derive; #[derive(Hash32)] struct Ipv4Addr([u8; 4]);
Hashers
This crate provides implementations of the following 32-bit hashing algorithms:
Future
In the future we'd like to deprecate this crate in favor of making core::hash::Hasher
generic
over the size of the computed hash. Below is shown the planned change (but it doesn't work due
to limitations in the associated_type_defaults
feature):
#![feature(associated_type_defaults)] trait Hasher { type Hash = u64; // default type for backwards compatibility fn finish(&self) -> Self::Hash; // changed fn write(&mut self, bytes: &[u8]); }
With this change a single #[derive(Hash)]
would enough to make a type hashable with 32-bit and
64-bit hashers.
Structs
BuildHasherDefault | See |
FnvHasher | 32-bit Fowler-Noll-Vo hasher |
Murmur3Hasher | 32-bit MurmurHash3 hasher |
Traits
BuildHasher | See |
Hash | See |
Hasher | See |